package edu.erpan.web.util;

import java.io.IOException;
import java.util.ResourceBundle;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;

import edu.erpan.bl.entities.administracion.Usuario;

public class Recursos {

	/**
	 * IDENTIFICADORES DE LOS MENSAJES
	 * */
	
	public static String MENSAJE_ERROR_USUARIO_SIN_PERMISOS="administracion.usuarioSinPermisos";
	
	public static String MENSAJE_ERROR_INESPERADO="error.inesperado";
	
	public static String TITULO="titulo";
	public static String ID_MENSAJES="idMensajes";
	public static String ID_MENSAJES_FORMULACION="idMensajesFormulacion";
	public static String ID_MENSAJES_LINEA_DETALLE="idMensajesLineaDetalle";

	public static String MENSAJE_CAMPO_OBLIGATORIO="campo.obligatorio";

	public static String MENSAJE_ERROR_USUARIO_INACTIVO="error.sesion.usuarioInactivo";
	
	public static String MENSAJE_ERROR_USUARIO="error.usuario";
	public static String MENSAJE_ERROR_USUARIOS="error.usuarios";
	public static String MENSAJE_ERROR_PERSONA="error.persona";
	public static String MENSAJE_ERROR_PERSONAS="error.personas";
	public static String MENSAJE_ERROR_TIPOS_ID="error.tiposId";
	public static String MENSAJE_ERROR_MATERIA_PRIMA="error.materiaPrima";
	public static String MENSAJE_ERROR_MATERIAS_PRIMAS="error.materiasPrimas";
	public static String MENSAJE_ERROR_PRODUCTO="error.producto";
	public static String MENSAJE_ERROR_PRODUCTOS="error.productos";
	public static String MENSAJE_ERROR_FORMULACION="error.formulacion";
	public static String MENSAJE_ERROR_FORMULACIONES="error.formulaciones";
	public static String MENSAJE_ERROR_PROVEEDOR="error.proveedor";
	public static String MENSAJE_ERROR_PROVEEDORES="error.proveedores";
	public static String MENSAJE_ERROR_RESPONSABLE="error.responsable";
	public static String MENSAJE_ERROR_RESPONSABLES="error.responsables";
	public static String MENSAJE_ERROR_RECEPCION_MP="error.recepcionMP";
	public static String MENSAJE_ERROR_RECEPCIONES_MP="error.recepcionesMP";
	public static String MENSAJE_ERROR_LINEA_INGRESO_MP="error.lineaIngresoMP";
	public static String MENSAJE_ERROR_LINEAS_INGRESO_MP="error.lineasIngresoMP";
	public static String MENSAJE_ERROR_MODULO="error.modulo";
	public static String MENSAJE_ERROR_MODULOS="error.modulos";
	
	public static String MENSAJE_ERROR_PEDIDO="error.pedido";
	public static String MENSAJE_ERROR_PEDIDOS="error.pedidos";
	public static String MENSAJE_ERROR_LINEA_PEDIDO="error.lineaPedido";
	public static String MENSAJE_ERROR_LINEAS_PEDIDOS="error.lineasPedido";
	public static String MENSAJE_ERROR_CLIENTE="error.cliente";
	public static String MENSAJE_ERROR_CLIENTES="error.clientes";
	
	public static String MENSAJE_ERROR_CALCULO_CONSUMO_MATERIA_PRIMA="error.calculoConsumoMateriaPrima";
	
	public static String MENSAJE_ERROR_GUARDADO="error.guardado";
	public static String MENSAJE_ERROR_EDICION="error.edicion";
	public static String MENSAJE_ERROR_ELIMINAR="error.eliminar";
	public static String MENSAJE_ERROR_CONSULTA="error.consulta";
	public static String MENSAJE_ERROR_SELECCION="error.seleccion";
	
	public static String MENSAJE_ERROR_USUARIO_EXISTE="error.gestionUsuarios.existeUsuario";
	public static String MENSAJE_ERROR_GESTION_USUARIOS_PASSWORD_NO_IGUALES="error.gestionUsuarios.passwordsNoCoinciden";
	
	/**
	 * FIN DE IDENTIFICADORES DE LOS MENSAJES
	 * */
	
	private ResourceBundle mensajes;
	private ResourceBundle etiquetas;
	private static Recursos instancia=null;
	
	public static int FATAL=0;
	public static int ERROR=1;
	public static int INFO=2;
	public static int WARN=3;
	
	private Recursos() {
		// TODO Auto-generated constructor stub
		mensajes=ResourceBundle.getBundle("mensajes");
		etiquetas=ResourceBundle.getBundle("etiquetas");
	}

	public static Recursos getInstance(){
		if(instancia==null)
			instancia=new Recursos();
		return instancia;
	}
	
	public synchronized String getMensaje(String key){
		return mensajes.getString(key);
	}
	public synchronized String getEtiqueta(String key){
		return etiquetas.getString(key);
	}
	public synchronized void addMessagePage(String idMensajes,int tipoMensaje,String mensaje){
		FacesContext context=FacesContext.getCurrentInstance();
		if(tipoMensaje==FATAL){
			context.addMessage(idMensajes, new FacesMessage(FacesMessage.SEVERITY_FATAL,mensaje,"fatalidad"));
		}else{
			if(tipoMensaje==ERROR){
				context.addMessage(idMensajes, new FacesMessage(FacesMessage.SEVERITY_ERROR,mensaje,"error"));
			}else{
				if(tipoMensaje==WARN){
					context.addMessage(idMensajes, new FacesMessage(FacesMessage.SEVERITY_WARN,mensaje,"advertencia"));
				}else{
					if(tipoMensaje==INFO){
						context.addMessage(idMensajes, new FacesMessage(FacesMessage.SEVERITY_INFO,mensaje,"informacion"));
					}
				}
			}
		}
	}
	public synchronized Usuario verficarInicioSession(){
		try {
			FacesContext context=FacesContext.getCurrentInstance();
			Usuario usuario=(Usuario) context.getExternalContext().getSessionMap().get("usuario");
			Integer idRol=(Integer) context.getExternalContext().getSessionMap().get("idRol");
			if(usuario==null||idRol==null){
				context.getExternalContext().getSessionMap().remove("menuBean");
				if(!context.getExternalContext().isResponseCommitted()){
					HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
			        String path=request.getContextPath();
					context.getExternalContext().redirect(path+"/inicio.iface");
				}
			}else{
				return usuario;
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			String mensaje=getMensaje(Recursos.MENSAJE_ERROR_INESPERADO);
			addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje);
		}
		return null;
	}
	public synchronized void cerrarSesion(){
		try {
			FacesContext context=FacesContext.getCurrentInstance();
			context.getExternalContext().getSessionMap().clear();
			HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
	        String path=request.getContextPath();
			context.getExternalContext().redirect(path+"/inicio.iface");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			String mensaje=getMensaje(Recursos.MENSAJE_ERROR_INESPERADO);
			addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje);
		}
	}
}
